<?php
/**
 * @package mc
 */
/**
 * @package mc
 */
class ControllerSite extends Controller {
	/**
	 * título da página
	 */
	public $pagina_titulo 		= "Uaihost";
	
	/**
	 * sub-titulo da página
	 */
	public $pagina_subtitulo 	= "Porque o complexo nada mais é do que uma fila extensa de simplicidades ...";
	
	/**
	 * cabeçalho extra
	*/
	public $meta				= "";
	
	/**
	 * Fecha a sessão corrente e redireciona para index
	 * @return string
	 */
	private function getSair()
	{
		session_start();
		session_destroy();
		return "<script>document.location.href='.'</script>";
	}
	
	/**
	 * Retorna o menu de páginas
	 * @return $retorno string
	 */
	public function getMenuPaginas()
	{
		// retorno padrão
		$retorno = "";
		
		// atualizando online
		$this->setOnline();
		
		// buscando os menus no banco de dados
		$retorno = $this->model->getMenuPaginas();
		if (is_array($retorno))
		{
			$retorno = $this->view->getMenuPaginas($retorno);
		}
		return $retorno;
	}
	
	/**
	 * Retorna o menu de administração, caso não esteja logado retorna link para página login
	 * @param string $nivel Nível do usuário
	 * @return string $retorno
	 */
	public function getMenuAdministracao()
	{
		$retorno = "<ul>\n";
		if (isset($_SESSION[md5("login")]))
		{
			$retorno .= "\t<li><a href='".$_REQUEST["raiz"]."admin'>Administração</a></li>\n";
			$retorno .= "\t<li><a href='".$_REQUEST["raiz"]."conta'>Minha Conta</a></li>\n";
			$retorno .= "\t<li><a href='".$_REQUEST["raiz"]."sair'>Sair</a></li>\n";
		} else
		{
			$retorno .= "\t<li><a href='login'>Login</a></li>\n";
		}
		// fechando a menu administração
		$retorno .= "</ul>\n";
		
		// retorno
		return $retorno;
	}
	
	/**
	 * Busca resultado da pesquisa em todas as páginas
	 * @param string Texto para pesquisa
	 * @return string
	 */
	private function getPesquisa()
	{
		// retorno padrão
		$retorno = "";
		
		// buscando o resultado da pesquisa
		$retorno = $this->model->getPesquisa($_POST["pe_texto"]);
		if (is_array($retorno) && $_POST["pe_texto"])
		{
			$retorno = $this->view->getPesquisa($retorno);
		} else
		{
			$retorno = $this->view->getPaginaIndex("A pesquisa retornou vazio ...");
		}
		
		// retorno
		return $retorno;
	}
	
	/**
	 * Retorna uma página que foi criada no banco de dados ou por algum método da classe site
	 * @return string $retorno
	 */
	public function getPagina()
	{
		// retorno padrão
		$retorno = "";
		
		// escolhendo a página pela url
		switch($_REQUEST["pag1"])
		{
			case "login":
				$retorno = $this->getAutenticacao();
				break;
			case "conta":
				$retorno = $this->getConta();
				break;
			case "admin":
				$_SESSION["desativa_cabecalho"] = 1;
				return $this->view->getAdministracao();
				break;
			case "sair":
				return $this->getSair();
				break;
			default:
				$retorno = $this->model->getPagina($_REQUEST["pag1"]);	
		}
		
		// retorno erro de banco ou a página em html	
		$retorno = $this->view->getPaginaIndex($retorno);

		// retorno
		return $retorno;
	}
	
	/**
	 * Retorna o formulário de login ou a autenticação do usuário
	 * @return $retorno string
	 */
	public function getAutenticacao()
	{
		// propriedades do formulário
		$form["msg_titulo"] 				= "Entre com o login e a senha";
		$form["primeiro_foco"]				= "login";
		$form["estilo"]						= "width: 400px; margin: 60px 0px 0px 125px; ";
		
		// campo login
		$camp["login"]["titulo"]			= "Login";
		$camp["login"]["obrigatorio"]		= 1;
		$camp["login"]["tamanhominimo"]		= 6;
		$camp["login"]["tamanhomaximo"]		= 15;
		
		// campo senha
		$camp["senha"]["titulo"]			= "Senha";
		$camp["senha"]["obrigatorio"]		= 1;
		$camp["senha"]["tamanhominimo"]		= 6;
		$camp["senha"]["tamanhomaximo"]		= 15;
		$camp["senha"]["tipo"]				= "senha";
		
		// dados do formulário
		$form["ajax"] = 1;
		
		// instanciando o objeto formulário
		$this->setForm($form,$camp,"site-site-getAutenticacao");
		
		// removendo o botão excluir
		unset($this->Form->form["botoes"]["excluir"]);
		
		// alterando o valor do campo salvar
		$this->Form->form["botoes"]["salvar"]["valor"] = "Entrar";
	
		// se o formulário foi postado		
		if ($_SERVER["REQUEST_METHOD"]=="POST")
		{
			if ($_POST["login"] && $_POST["senha"])
			{
				$resultado = $this->model->getAutenticacao($_POST["login"],$_POST["senha"]);
				if (is_array($resultado))
				{
					if ($resultado["login"]==$_POST["login"])
					{
						$_SESSION[md5("login")] = $resultado["login"];
						$_SESSION[md5("nivel")] = md5($resultado["nivel"]);
						$agora = date("Y-m-d H:i:s");

						$msg  = "Login autenticado com sucesso<br /><br />\n";
						$msg .= "Seu último acesso, número ".$resultado["acessos"].", foi em <br />\n";
						$msg .= strftime("%A, %d de %B de %Y",strtotime($resultado["ultimo"]))." as ";
						$msg .= substr($resultado["ultimo"],10,strlen($resultado["ultimo"]))."<br />\n";
						$msg .= " exatamente a ".vsprintf("%d hora(s), %d minuto(s) e %d segundo(s)",$this->timediff(strtotime($agora), strtotime($resultado["ultimo"])))."<br />\n";

						$retorno = $this->Form->getXml(htmlspecialchars($msg),0,"getRespostaAutenticada",6000);
					} else $retorno = $this->Form->getXml("Usuário ou senha inválidos !!!",1);
				} else
				{
					$retorno = $this->Form->getXml("Falha na autenticação !!!",1,"","6000");
				}
			} else
			{
				$retorno = $this->Form->getXml("Os campos login e senha são de preenchimento obrigatórios",1);
			}
		} else
		{
			$retorno = $this->getForm();
		}

		
		return $retorno;
	}
	
	/**
	 * Atualiza o último acesso do usuário
	 */
	private function setOnline()
	{
		if ($_SESSION[md5("login")]) $this->model->setOnline($_SESSION[md5("login")]);
	}
	
	/**
	 * Retorna o status do usuário
	 * @return string $reetorno
	 */
	public function getConta()
	{
		
		// dados do formulário
		$form["primeiro_foco"] 					= "senha";
		$form["subtitulo"]						= "- para mudar a senha, digite duas vezes.<br />\n";
		$form["subtitulo"]						.= "* campos de preenchimento obrigatório.";

		// campos do formulário
		$campos["log_usua"]["desativar"] 		= 1;
		$campos["log_usua"]["titulo"] 			= "Login";
		$campos["log_usua"]["estilo"] 			= "text-align: center; width: 100px; border: 0px; border: 0px; border-bottom: 2px dashed green; font-weight: bold;";
		
		$campos["niv_usua"]["titulo"] 			= "Nível";
		$campos["niv_usua"]["estilot"] 			= "width: 155px;";
		
		$campos["ati_usua"]["titulo"] 			= "Ativo";
		$campos["ati_usua"]["estilot"] 			= "width: 79px;";

		$campos["ult_aces"]["desativar"] 		= 1;
		$campos["ult_aces"]["titulo"] 			= "Último Acesso";
		$campos["ult_aces"]["estilo"] 			= "border: 0px; border: 0px; border-bottom: 1px dotted green; text-align: right; width: 141px;";
		$campos["ult_aces"]["estilot"]			= "font-style: italic; font-weight: bold;";
		
		$campos["num_aces"]["desativar"] 		= 1;
		$campos["num_aces"]["titulo"] 			= "Número de Acessos";
		$campos["num_aces"]["estilo"] 			= "border: 0px; border-bottom: 1px dotted green; width: 20px; text-align: right;";
		$campos["num_aces"]["estilot"]			= "width: 230px; font-style: italic;font-weight: bold;";
		
		$campos["nom_usua"]["tamanhomaximo"] 	= 60;
		$campos["nom_usua"]["titulo"] 			= "Nome";
		$campos["nom_usua"]["obrigatorio"] 		= 1;
		$campos["nom_usua"]["caixa"] 			= "ma";
		$campos["nom_usua"]["tamanhominimo"]	= 10;
		
		$campos["ema_usua"]["tamanhomaximo"] 	= 60;
		$campos["ema_usua"]["titulo"] 			= "email";
		$campos["ema_usua"]["obrigatorio"] 		= 1;
		$campos["ema_usua"]["caixa"] 			= "mi";
		$campos["ema_usua"]["tipo"] 			= "email";
		
		$campos["sen_usua"]["titulo"] 			= "Senha";
		$campos["sen_usua"]["tamanhomaximo"] 	= 10;
		$campos["sen_usua"]["tamanhominimo"]	= 6;
		$campos["sen_usua"]["tipo"] 			= "senha";
		$campos["sen_usua"]["valor"] 			= "";
		$campos["sen_usua"]["clone"] 			= "confirma_senha";

		$campos["sen_usu2"]["titulo"] 			= "Confirma Senha";
		$campos["sen_usu2"]["tamanhomaximo"] 	= 10;
		$campos["sen_usu2"]["tamanhominimo"]	= 6;
		$campos["sen_usu2"]["tipo"] 			= "senha";
		$campos["sen_usu2"]["valor"] 			= "";
		$campos["sen_usu2"]["estilot"] 			= "width: 170px; ";
		
		// verificando o nível
		if ($_SESSION[md5("nivel")] > md5("1"))
		{
			$campos["ati_usua"]["desativar"] 	= 1;
		} else
		{
			$campos["ati_usua"]["desativar"] 	= 1;
			$campos["niv_usua"]["desativar"] 	= 1;
			$campos["ati_usua"]["estilo"] 		= "font-weight: bold; background-color: green; width: 30px; text-align: center; color: #fff; border: 0px;";
			$campos["niv_usua"]["estilo"] 		= "font-weight: bold; background-color: green; width: 30px; text-align: center; color: #fff; border: 0px;";
		}
		
		// instanciando o objeto formulário
		$this->setForm($form,$campos,"site-site-getConta",1);

		// se for administrador, não deixa excluir		
		if ($_SESSION[md5("nivel")] == md5("1") && $_SESSION[md5("login")]=="administrador")
		{
			unset($this->Form->form["botoes"]["excluir"]);
		}
		// incrementando mais o botão atualizar
		$this->Form->form["botoes"]["atualizar"]["valor"] 	= "Atualizar";
		$this->Form->form["botoes"]["atualizar"]["tipo"] 	= "button";
		$this->Form->form["botoes"]["atualizar"]["link"] 	= "./conta";
		
		// se o formulário foi postado
		if ($_SERVER["REQUEST_METHOD"]=="POST")
		{
			// se o formuláriao foi validado, conforme as regras do objeto MouraForm
			if ($this->Form->getValidacao())
			{
				// se o campo senha está vazio, então não coloca ele na sqlDAO
				if ($_POST["senha"]=="") unset($_POST["senha"]); elseif(!$this->Form->form["ajax"]) $_POST["senha"] = md5($_POST["senha"]);

				// removendo o campo fantasma confirma_senha
				unset($_POST["confirma_senha"]);
				
				// recuperando a sqlScaffolds do Formulário
				$sql = $this->getSqlForm("usuarios","id");
				
				// executando a sqlScaffolds do Formulário
				if ($this->model->Execute($sql))
				{
					// se foi pedida um edição, apenas atualiza os dados
					if ($_POST["tip"]=="edicao") $this->Form->form["msg_alerta"] = "O seu perfil foi atualizado com sucesso !!!";
				} else // se ocorreu na execução da sql
				{
					$this->Form->form["msg_alerta"] = "Erro ao tentar gravar registro !!! ".nl2br(print_r($this->model->erros,true));
				}
			} else // se o formulário não foi validado
			{
				$this->Form->form["msg_alerta"] = "Erro na validação do formulário !!!";
			}
		}
		
		// atualizando o conteúdo do formulário
		$this->setDadosForm("usuarios", 0, "id", "log_usua='".$_SESSION[md5("login")]."'");
		
		// retornando o formulário
		$retorno = $this->getForm(array("log_usua","niv_usua","ati_usua","#","sen_usua","sen_usu2","#","nom_usua","#","ema_usua","ult_aces","num_aces"));
		return $this->view->getPaginaIndex($retorno);
	}
	
	/**
	 * Retorna uma lista com os artigos
	 * @param string $tot Total de artigos
	 * @return string $retorno Relação de artigos formatadas
	 */
	public function getArtigos($tot=20)
	{
		$retorno = array();
		
		// recuperando os artigos do banco
		$retorno = $this->model->getArtigos($tot);
		
		// formatando os artigos para exibição
		$retorno = $this->view->getArtigos($retorno);
		
		return $retorno;
	}
	
}
